package com.sumainfor.wx.tenant.service.impl;

import com.qiniu.util.Json;
import com.sumainfor.common.util.DateUtils;
import com.sumainfor.common.util.JsonResult;
import com.sumainfor.wx.tenant.dao.HoTenantIdentitMapper;
import com.sumainfor.wx.tenant.dao.ZfeignMapper;
import com.sumainfor.wx.tenant.service.HoTenantIdentitService;
import com.sumainfor.wx.tenant.service.ZfeignService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.math.BigDecimal;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.locks.ReentrantLock;

/**
 * pc端调用微信租客端
 */
@Service
public class HoTenantIdentitServiceimpl implements HoTenantIdentitService {

    private ReentrantLock lock = new ReentrantLock(false);
    Logger log = LoggerFactory.getLogger(HoTenantIdentitServiceimpl.class);

    @Autowired
    HoTenantIdentitMapper hoTenantIdentitMapper;
    /**
     * 签约时根据手机号查询微信端的租客信息
     */
    @Override
    public JsonResult getHoTenantIdentit(Map<String, Object> params) {
        JsonResult result=new JsonResult();
        Map<String,Object> resultMap=new HashMap<String,Object>();
        if (params.get("TenId")==null ||params.get("beginDate")==null||params.get("endDate")==null
                ||params.get("PactMoney")==null){
            return  result.putFailed("参数不正确");
        }
        //合同月租金
        BigDecimal pactMoney=new BigDecimal(params.get("PactMoney").toString());
        //延期日租金
        BigDecimal dayMoney=new BigDecimal("0");
        //延期总金额
        BigDecimal daySumMoney=new BigDecimal("0");
        //延期开始时间
        String beginDate=params.get("beginDate").toString();
        //延期结束时间
        String endDate=params.get("endDate").toString();
        //延期天数
        Integer dateCount=0;
        //判断两个时间是否在一个月内 true 同一个月  false 不在同一个月
        Boolean ifDateOfMonth=DateUtils.checkMonth(beginDate,endDate);
        System.out.println("是否在同一个月:"+ifDateOfMonth);
        if (ifDateOfMonth){//在同一个月
            //两个日期之间相差的天数
            Integer dayCount=DateUtils.betweenDay(beginDate,endDate);
            //获取时间所在的月份有多少天
            Integer count=DateUtils.getMonthOfDay(beginDate);
            //合同月租金/延期开始时间所在的月份天数(除法 四舍五入 保留两位小数)
            dayMoney=pactMoney.divide(new BigDecimal(String.valueOf(count)),2,BigDecimal.ROUND_HALF_UP);
            //延期总金额=延期日租金*延期天数*2（延期金额=日租金乘以2 ）
            daySumMoney=dayMoney.multiply(new BigDecimal("2")).multiply(new BigDecimal(String.valueOf(dayCount)));
            //延期天数
            dateCount=dayCount;
        }else{//不在同一个月
            //获取延期开始时间月份的天数
            Integer beginCount=DateUtils.getMonthOfDay(beginDate);
            //获取延期结束时间月份的天数
            Integer endCount=DateUtils.getMonthOfDay(endDate);
            //计算延期开始时间和延期开始时间所在月的最后一天相差天数
            Integer beginDayCount=DateUtils.betweenDay(beginDate,DateUtils.getMonthLastDay(beginDate));
            //计算延期结束时间和延期结束时间所在月的第一天相差天数
            Integer endDayCount=DateUtils.betweenDay(DateUtils.getMonthFirstDay(endDate),endDate);
            //（ (2000/31) X4+(2000/30)x3）/7 上半金额
            BigDecimal beginMoney=pactMoney.divide(new BigDecimal(String.valueOf(beginCount)),2,BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal(String.valueOf(beginDayCount)));
            //下半金额
            BigDecimal endMoney=pactMoney.divide(new BigDecimal(String.valueOf(endCount)),2,BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal(String.valueOf(endDayCount)));
            //延期总金额 （延期金额=日租金乘以2 ）
            daySumMoney=beginMoney.add(endMoney).multiply(new BigDecimal("2"));
            //延期日租金
            dayMoney=(beginMoney.add(endMoney)).divide(new BigDecimal(String.valueOf(beginDayCount+endDayCount)),2,BigDecimal.ROUND_HALF_UP);
            //延期天数
            dateCount=beginDayCount+endDayCount;
        }
        Map<String,Object> map=hoTenantIdentitMapper.getHoTenantIdentit(params);
        resultMap.put("tenData",map);
        resultMap.put("daySumMoney",daySumMoney);
        resultMap.put("dayMoney",dayMoney);
        resultMap.put("dateCount",dateCount);
        if (map!=null){
            result.put(resultMap);
        }else{
            result.putFailed("服务器繁忙");
        }
        return result;
    }
    /**
     * 根据租客手机号查询租客的详细信息
     */
    public JsonResult getHoTenantIdentitNew(Map<String, Object> params) {
        JsonResult result=new JsonResult();
        Map<String,Object> resultMap=new HashMap<String,Object>();
        if (params.get("TenId")==null){
            return  result.putFailed("参数不正确");
        }
        Map<String,Object> map=hoTenantIdentitMapper.getHoTenantIdentit(params);
        if (map!=null){
            result.put(map);
        }else{
            result.putFailed("服务器繁忙");
        }
        return result;
    }
    /**
     * 根据租客手机号查询租客的详细信息
     * @param params
     * @return
     */
    @Override
    public JsonResult getHoTenantInfo(Map<String, Object> params) {
        JsonResult result=new JsonResult();
        if (params.get("TenPhone")==null){
            return   result.putFailed("参数不正确");
        }
        Map<String,Object> map=hoTenantIdentitMapper.getHoTenantInfo(params);
        if (map!=null){//IfCount 根据手机号是否能查到数据 0否 1是
            map.put("IfCount",1);
        }else{
            map=new HashMap<String,Object>();
            map.put("IfCount",0);
        }
        return result.put(map);
    }
}
